# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/10/21
# @File : 29.LIS on Tree.py 求节点1到全部节点的路径的LIS，注意树不是图。且说明了n个节点只有n-1条边。所以不存在1到k有两条路径
import bisect
import sys
sys.setrecursionlimit(999999999)
#涉及递归的一定要写这个
inf = sys.maxsize
def dfs(now,parent,dp):
    num = a[now]
    insert_index = bisect.bisect_left(dp,num)#获取大于等于num的最小值
    raw = dp[insert_index]
    dp[insert_index] = num

    ans[now] = bisect.bisect_left(dp,inf-1)#获取当前now的dp数组长度就是当前now为终点的路径的LIS。之前觉得可以是insert_index+1，是错误的，因为如果insert_index不为dp最后一个的话，它是在中间，不能代表是当前now对应的dp的长度

    for nxt in tree[now]:
        if nxt == parent:#不能往回走。
            continue
        dfs(nxt,now,dp)

    dp[insert_index] = raw#回溯，复原之前的dp值。

def dp_solve():
    dp = [inf]*n
    dfs(0,-1,dp)
    for res in ans:#输出以1为起点，以1-N为终点的路径的LIS
        print(res)


"""
本题考察树的遍历DFS＋DP+回溯，LIS二分法是dp长度为答案
O(nlogn)算法的树上LIS。该题还需加入回溯，这样树上不同分支的数据，就不会互相影响了
"""
if __name__ == '__main__':
    n = int(input())
    a = list(map(int,input().split()))
    tree = [list() for _ in range(n)]
    for _ in range(n-1):
        u,v = map(int ,input().split())
        tree[u-1].append(v-1)
        tree[v-1].append(u-1)
    ans = [0] * n
    dp_solve()